package br.com.esrestaurante.faces;

import java.io.IOException;
import java.io.Serializable;
import java.util.Calendar;
import java.util.List;

import br.com.esrestaurante.dao.AberturaDAO;
import br.com.esrestaurante.dao.ContaDAO;
import br.com.esrestaurante.dao.MesaDAO;
import br.com.esrestaurante.dao.UsuarioDAO;
import br.com.esrestaurante.entidades.Abertura;
import br.com.esrestaurante.entidades.Conta;
import br.com.esrestaurante.entidades.Mesa;
import br.com.esrestaurante.entidades.Usuario;
import br.com.esrestaurante.tipos.TipoPerfilUsuario;

public class AbrirMesaFaces extends Faces implements Serializable{

	private static final long serialVersionUID = 1L;

	private final String titulo = "Abrir Mesa";
	
	private List<Mesa> listaMesasLivres;
	private List<Usuario> listaClientes;
		
	private Mesa mesaSelecionada;
	
	private Usuario clienteSelecionado;
	
	private Usuario responsavelSelecionado;
	
	
	public AbrirMesaFaces() throws IOException {

		Usuario usuario = getUsuarioLogado();
		
		if(TipoPerfilUsuario.CLIENTE.equals(usuario.getPerfil())) {
			
			clienteSelecionado = usuario;
			responsavelSelecionado = usuario;
		} else {
			responsavelSelecionado = usuario;
		}
		
		listaMesasLivres = new MesaDAO().listarMesasLivres();
		listaClientes = new UsuarioDAO().listarClientes();
	}

	
	public String  selecionarMesaAction() {
		return "";
	}
	
	public String  selecionarClienteAction() {
		return "";
	}
	
	public String abrirMesaAction() {
		
		
		
		if(possueMesaAberta()) {
			
			adicionarMsgErro("Cliente com mesa Aberta", "O cliente pa possui uma Mesa aberta no sistema");
			clienteSelecionado = null;
			
		}else {
			
			if(clienteSelecionado == null){
				adicionarMsgErro("Selecionar um Cliente", "Favos selecionar um cliente");//TODO nunca vai acontecer
			}else {
				Abertura abertura = new Abertura();
				abertura.setCliente(clienteSelecionado);
				abertura.setGarcom(responsavelSelecionado);
				abertura.setMesa(mesaSelecionada);
				abertura.setDataAbertura(Calendar.getInstance());
				
				new AberturaDAO().salvar(abertura);
				return getStringRetorno();
			}
			
		}
		
		
		return null;
	}

	private boolean possueMesaAberta() {
		
		Abertura abertura = new AberturaDAO().recuperarUltimaAberturasClietne(clienteSelecionado);
				
		if(abertura == null) {
			
			return false;
		
		}else {
			if (abertura.getDataFechamento()!= null) {
				return false;
			}
		}
		return true;
		
	}
	
	public String voltarAction() {
		
		return getStringRetorno();
	}	
		
	public Usuario getClienteSelecionado() {
		return clienteSelecionado;
	}

	public void setClienteSelecionado(Usuario clienteSelecionado) {
		this.clienteSelecionado = clienteSelecionado;
	}

	public Usuario getResponsavelSelecionado() {
		return responsavelSelecionado;
	}

	public void setResponsavelSelecionado(Usuario responsavelSelecionado) {
		this.responsavelSelecionado = responsavelSelecionado;
	}

	public List<Mesa> getListaMesasLivres() {
		return listaMesasLivres;
	}

	public void setListaMesasLivres(List<Mesa> listaMesasLivres) {
		this.listaMesasLivres = listaMesasLivres;
	}


	public Mesa getMesaSelecionada() {
		return mesaSelecionada;
	}

	public void setMesaSelecionada(Mesa mesaSelecionada) {
		this.mesaSelecionada = mesaSelecionada;
	}

	public String getTitulo() {
		return titulo;
	}


	public List<Usuario> getListaClientes() {
		return listaClientes;
	}


	public void setListaClientes(List<Usuario> listaClientes) {
		this.listaClientes = listaClientes;
	}

	public boolean isExibeBtAbrir() {
		return (mesaSelecionada != null && clienteSelecionado != null);
	}

}
